// 什么是闭包
// 闭包由两部分组成   : 函数 和  创建函数的环境

function f1() {
  const n = 999
  return function f2() {
    alert(n)
  }
}
const test = f1()
test()

// 垃圾清理机制   引用计数 导致闭包不会从内存中清除
// 如果说闭包过多,还不清理 那么内存泄漏就会很严重

// 闭包的应用  模块模式
const calculator = (function () {
  let a = 1
  function addCalculator(val) {
    a += val
  }
  return {
    add1: function () {
      addCalculator(1)
    },
    add2: function () {
      addCalculator(2)
    },
    result: function () {
      return a
    }
  }
})()

console.log(calculator.result())
calculator.add1()
console.log(calculator.result())
calculator.add2()
console.log(calculator.result())

// 只要不清楚   就一直存在一个封闭的作用域,里面的数据和方法不会清空 (jquery)
